const KoaRouter = require("@koa/router");
const { verifyAuth } = require("../middleware/login.middleware");
const { verifyPermissions } = require("../middleware/permission.middleware");
const {
  create,
  list,
  detail,
  update,
  deleteMoment,
  addLabels,
} = require("../controller/moment.controller");
const { verifyLabelExists } = require("../middleware/label.middleware");

// 创建路由对象
const momentRouter = new KoaRouter({ prefix: "/moment" });

// 增加
momentRouter.post("/", verifyAuth, create);
// 查询
momentRouter.get("/", list);
momentRouter.get("/:momentId", detail);
// 删除
// momentRouter.delete("/:momentId", verifyAuth, verifyPermissions, deleteMoment);
// 修改
// momentRouter.patch("/:momentId", verifyAuth, verifyPermissions, update);

// 删除 -- 动态验证：只有登录的用户才能修改，只有该用户能删除对应动态的权限才能修改，需要做权限控制
momentRouter.delete(
  "/:momentId",
  verifyAuth,
  verifyPermissions("moment"),
  deleteMoment
);
// 修改 -- 动态验证：只有登录的用户才能修改，只有该用户能修改对应动态的权限才能修改，需要做权限控制
momentRouter.patch(
  "/:momentId",
  verifyAuth,
  verifyPermissions("moment"),
  update
);
// 添加标签
/**
 * 中间件：
 * 1、是否登录
 * 2、验证是否有操作这个动态的权限
 * 3、额外中间件：验证label的name是否已经存在于label表中
 *    *如果存在，直接使用
 *    *如果不存在，那需要将label的name添加label表中
 * 4、最终步骤
 *    *所有的label都在表中
 *    *动态2和labels的关系，添加到关系表中
 */
momentRouter.post(
  "/:momentId/labels",
  verifyAuth,
  verifyPermissions("moment"),
  verifyLabelExists,
  addLabels
);

module.exports = momentRouter;
